package com.ktjy.order.feign;

import com.ktjy.base.Q;
import com.ktjy.base.R;
import com.ktjy.order.feign.fallback.FeignOrderServiceFallback;
import com.ktjy.pojo.order.Order;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * FeignOrderService 远程调用订单服务
 *
 * @author LILIBO
 * @since 2025-06-04
 */
@FeignClient(value = "cloud-service-order", fallback = FeignOrderServiceFallback.class)
// @RequestMapping("/order")
public interface FeignOrderService {

    /**
     * 新增订单记录
     *
     * @param order 订单
     * @return R 成功返回true
     */
    @Operation(summary = "新增订单记录")
    @PostMapping("/order/order/add")
    R add(@Parameter(description = "订单对象") @RequestBody Order order);

    /**
     * 保存或更新订单记录
     *
     * @param order 订单（带主键ID表示更新，否则为新增）
     * @return R 成功返回保存后的完整对象
     */
    @Operation(summary = "保存或更新订单记录")
    @PostMapping("/order/order/save")
    R save(@Parameter(description = "订单对象") @RequestBody Order order);

    /**
     * 修改订单记录
     *
     * @param order 订单
     * @return R 成功返回true
     */
    @Operation(summary = "修改订单记录")
    @PostMapping("/order/order/update")
    R update(@Parameter(description = "订单对象") @RequestBody Order order);

    /**
     * 通过id删除一条订单记录
     *
     * @param id
     * @return R 成功返回true
     */
    @Operation(summary = "通过id删除一条订单记录")
    @PostMapping("/order/order/delete")
    R deleteById(@Parameter(description = "订单id") Long id);

    /**
     * 通过多个id批量删除订单记录
     *
     * @param ids
     * @return R
     */
    @Operation(summary = "通过多个id批量删除订单记录")
    @PostMapping("/order/order/remove")
    R removeByIds(@Parameter(description = "订单id集合") @RequestBody List<Long> ids);

    /**
     * 通过id查询单条订单记录
     *
     * @param id
     * @return R
     */
    @Operation(summary = "通过id查询单条订单记录")
    @GetMapping("/order/order/{id}")
    R getById(@Parameter(description = "订单id") @PathVariable Long id);

    /**
     * 查询订单列表
     *
     * @param order 订单
     * @return R
     */
    @Operation(summary = "查询订单列表")
    @GetMapping("/order/order/list")
    R list(@Parameter(description = "查询的订单对象") Order order);

    /**
     * 分页查询订单
     *
     * @param pageNo 当前页
     * @param pageSize 每页条数
     * @param order 订单
     * @return
     */
    @Operation(summary = "分页查询订单")
    @GetMapping("/order/order/page")
    R page(@Parameter(description = "当前页") @RequestParam(required = false, defaultValue = "1") Long pageNo, @Parameter(description = "每页条数") @RequestParam(required = false, defaultValue = "10") Long pageSize, @Parameter(description = "查询的订单对象") Order order);

    /**
     * 分页查询订单列表
     *
     * @param pageNo 当前页
     * @param pageSize 每页条数
     * @param param 通用查询参数
     * @return 返回分页数据列表，其中count为数据总量
     */
    @Operation(summary = "分页查询订单列表")
    @GetMapping("/order/order/querypage")
    R queryPage(@Parameter(description = "当前页") @RequestParam(required = false, defaultValue = "1") Long pageNo, @Parameter(description = "每页条数") @RequestParam(required = false, defaultValue = "10") Long pageSize, @Parameter(description = "通用查询参数") Q param);

    /**
     * 创建订单
     *
     * @param productId 购买的商品ID
     * @param uid 购买用户ID
     * @return R 订单对象
     */
    @Operation(summary = "创建订单")
    @PostMapping("/order/order/create")
    R create(@Parameter(description = "购买的商品ID") @RequestParam Long productId, @Parameter(description = "下单用户") @RequestParam Long uid);

}
